/*
 * ref_count.h
 *
 *  Created on: 2015年9月29日
 *      Author: chens
 */

#ifndef ITS_GW_APP_REF_COUNT_H_
#define ITS_GW_APP_REF_COUNT_H_

#ifdef __cplusplus
extern "C" {
#endif

typedef struct ref_count_t cm_ref_t;

/*
 * @brief   创建一个引用计数器，最大可以计数 capacity 个指针
 */
cm_ref_t * cmref_new(int capacity);

/*
 * @brief   销毁由 ref_count_create 创建的对象
 */
void cmref_del(cm_ref_t * p);

/*
 * @brief   递增指针 ptr 的引用计数
 *
 * @return  成功返回0
 */
int cmref_add(cm_ref_t * p, void * ptr);

int cmref_dec(cm_ref_t * p, void * ptr);

/*
 * @brief   直接设置 ptr 的引用计数
 */
int cmref_set(cm_ref_t * p, void * ptr, int count);

/*
 * @brief   获取指针 ptr 的引用计数
 *
 * @return  成功返回0
 */
int cmref_get(cm_ref_t * p, void * ptr);

#ifdef __cplusplus
}
#endif

#endif /* ITS_GW_APP_REF_COUNT_H_ */
